package Negocios;

import Gestores.DtoObjects.TelefonoDTO;
import Gestores.Entidades.EntidadTelefono;
import Gestores.Factory.FactoryClass;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

public class TelefonoNegocio {

    private TelefonoDTO gestorTelefono;

    public TelefonoNegocio() {
        gestorTelefono = FactoryClass.getTelefonoInstance();
    }

    public ArrayList<Object> buscarPorIdAfiliado(String idAfiliado) throws Exception {
        return gestorTelefono.buscarPorId(idAfiliado);
    }

    public ArrayList<Object> buscarPorNumero(int numero) throws Exception {
        if (numero > 0) {
            return gestorTelefono.buscarPorNumero(numero);
        } else {
            throw new Exception("El formato del numero no es valido.\n Formato:Numero natural.");
        }
    }

    public ArrayList<Object> buscarPorTipo(char tipo) throws Exception {
        if ((tipo == 'C') || (tipo == 'F')) {
            return gestorTelefono.buscarPorTipo(tipo);
        } else {
            throw new Exception("Tipo de telefono no valido.");
        }
    }

    public void registrar(EntidadTelefono eTelefono) throws Exception {
        if (validarEntidad(eTelefono)) {
            gestorTelefono.insertar(eTelefono);
        } else {
            throw new Exception("Datos erróneos en la entidad del Telefono.");
        }
    }

    public void actualizar(int numeroViejo, EntidadTelefono eTelefono) throws Exception {
        if (validarEntidad(eTelefono) && (numeroViejo>0)) {
            gestorTelefono.actualizar(numeroViejo, eTelefono);
        } else {
            throw new Exception("Los datos no son consistentes.");
        }
    }

    public void eliminar(EntidadTelefono eTelefono) throws Exception {
        if (validarEntidadParaEliminar(eTelefono)) {
            gestorTelefono.eliminacionFisica(eTelefono);
        } else {
            throw new Exception("Datos ausentes.");
        }
    }

    public ArrayList<Object> mostrarDatos() throws Exception {
        return gestorTelefono.listarTabla();
    }

    public boolean existe(int numero) throws Exception {
        if (numero < 0) {
            throw new Exception("El numero no es válido.");
        } else {
            return gestorTelefono.existe(numero);
        }
    }

    public DefaultTableModel tabularDatos(ArrayList<Object> listaDatos) {
        String[] campos = new String[]{"Id Afiliado", "Numero", "Tipo"};
        DefaultTableModel model = new DefaultTableModel(campos, 0);
        for (int i = 0; i < listaDatos.size(); i++) {
            EntidadTelefono eTelefono = (EntidadTelefono) listaDatos.get(i);
            Object[] camposTelefono = new Object[]{eTelefono.getIdAfiliado(), eTelefono.getNumero(), eTelefono.getTipo()};
            model.addRow(camposTelefono);
        }
        return model;
    }

    private boolean validarEntidad(EntidadTelefono eTelefono) {
        if (eTelefono.getIdAfiliado() == null) {
            return false;
        }
        if (eTelefono.getNumero() == 0) {
            return false;
        }
        if (eTelefono.getTipo() == 0) {
            return false;
        }
        return true;
    }

    private boolean validarEntidadParaEliminar(EntidadTelefono eTelefono) {
        if (eTelefono.getIdAfiliado() == null) {
            return false;
        }
        if (eTelefono.getNumero() == 0) {
            return false;
        }
        return true;
    }
}
